在 SwiftUI 中,@Binding
是一個強大的屬性包裝器,用於在不同視圖間共享和更新數據。當一個視圖需要從其父視圖中接收並更新數據時,@Binding
就派上用場了。這樣,子視圖可以直接修改父視圖中的狀態,而不需要顯式地傳遞回調函數。
@Binding
定義父視圖中的狀態:
父視圖通常會擁有一個狀態屬性,使用 @State
來聲明。
struct ParentView: View {
@State private var isOn = false
var body: some View {
ChildView(isOn: $isOn)
}
}
在子視圖中使用 @Binding
:
子視圖接收來自父視圖的綁定變量,並且可以使用 @Binding
更新這些變量。
struct ChildView: View {
@Binding var isOn: Bool
var body: some View {
Toggle("Switch", isOn: $isOn)
}
}
父子視圖的數據傳遞:
當子視圖中 Toggle
的狀態改變時,父視圖中的 isOn
也會隨之改變,達到雙向數據綁定的效果。
想像一個設定頁面,其中的開關狀態由父視圖管理,而開關元件在子視圖中。這樣的結構讓代碼更加模組化,並且易於維護。透過 @Binding
,不僅能實現數據共享,還能避免冗長的參數傳遞或狀態同步問題。
總結來說,@Binding
是 SwiftUI 中用來在視圖間同步和共享狀態的核心工具,適合需要雙向數據流的場景。